package com.cencat.common.enums;

/**
 * 数据状态枚举
 * 用于标识数据的删除状态、启用状态等
 * 
 * @author cencat
 * @since 2024-01-01
 */
public enum DataStatus {

    /**
     * 正常
     */
    NORMAL(0, "正常"),

    /**
     * 已删除
     */
    DELETED(1, "已删除"),

    /**
     * 启用
     */
    ENABLED(1, "启用"),

    /**
     * 禁用
     */
    DISABLED(0, "禁用");

    /**
     * 状态码
     */
    private final Integer code;

    /**
     * 状态描述
     */
    private final String description;

    /**
     * 构造函数
     * 
     * @param code 状态码
     * @param description 状态描述
     */
    DataStatus(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 获取状态码
     * 
     * @return 状态码
     */
    public Integer getCode() {
        return code;
    }

    /**
     * 获取状态描述
     * 
     * @return 状态描述
     */
    public String getDescription() {
        return description;
    }

    /**
     * 根据状态码获取枚举
     * 
     * @param code 状态码
     * @return 数据状态枚举
     */
    public static DataStatus getByCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (DataStatus status : DataStatus.values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }

    /**
     * 判断是否为正常状态
     * 
     * @return 是否正常
     */
    public boolean isNormal() {
        return this == NORMAL;
    }

    /**
     * 判断是否已删除
     * 
     * @return 是否已删除
     */
    public boolean isDeleted() {
        return this == DELETED;
    }

    /**
     * 判断是否启用
     * 
     * @return 是否启用
     */
    public boolean isEnabled() {
        return this == ENABLED;
    }

    /**
     * 判断是否禁用
     * 
     * @return 是否禁用
     */
    public boolean isDisabled() {
        return this == DISABLED;
    }
}